home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xmcd-1.4 / install.sh < prev    next >
Encoding:
Linux/UNIX/POSIX Shell Script  |  1995-05-10  |  11.4 KB  |  630 lines

  1. #!/bin/sh
  2. #
  3. # @(#)install.sh    5.7 95/02/06
  4. #
  5. # Script to install the software binary and support files on
  6. # the target system.
  7. #
  8. #    xmcd  - Motif(tm) CD Audio Player
  9. #    cda   - Command-line CD Audio Player
  10. #
  11. #    Copyright (C) 1995  Ti Kan
  12. #    E-mail: ti@amb.org
  13. #
  14. #    This program is free software; you can redistribute it and/or modify
  15. #    it under the terms of the GNU General Public License as published by
  16. #    the Free Software Foundation; either version 2 of the License, or
  17. #    (at your option) any later version.
  18. #
  19. #    This program is distributed in the hope that it will be useful,
  20. #    but WITHOUT ANY WARRANTY; without even the implied warranty of
  21. #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  22. #    GNU General Public License for more details.
  23. #
  24. #    You should have received a copy of the GNU General Public License
  25. #    along with this program; if not, write to the Free Software
  26. #    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  27. #
  28.  
  29. PATH=/bin:/usr/bin:/sbin:/usr/sbin:/etc:/usr/local/bin
  30. export PATH
  31.  
  32. CATEGORIES="rock jazz blues newage classical reggae folk country soundtrack misc data"
  33. XMCD_VER=1.4
  34. DEMODB=4102560a
  35. DIRPERM=755
  36. CDIRPERM=777
  37. SCRPERM=755
  38. FILEPERM=444
  39. BINPERM=711
  40. XBINPERM=4711
  41. OWNER=bin
  42. GROUP=bin
  43. BINOWNER=bin
  44. BINGROUP=bin
  45. XBINOWNER=root
  46. XBINGROUP=bin
  47. ERRFILE=/tmp/xmcd.err
  48.  
  49. #
  50. # Utility functions
  51. #
  52.  
  53. doexit()
  54. {
  55.     if [ $1 -eq 0 ]
  56.     then
  57.         $ECHO "\nInstallation of xmcd is now complete."
  58.     else
  59.         $ECHO "\nErrors have occurred in the installation."
  60.         if [ $ERRFILE != /dev/null ]
  61.         then
  62.             $ECHO "See $ERRFILE for an error log."
  63.         fi
  64.     fi
  65.     exit $1
  66. }
  67.  
  68. logerr()
  69. {
  70.     if [ "$1" = "-p" ]
  71.     then
  72.         $ECHO "Error: $2"
  73.     fi
  74.     $ECHO "$2" >>$ERRFILE
  75.     ERROR=1
  76. }
  77.  
  78. getstr()
  79. {
  80.     $ECHO "$* \c"
  81.     read ANS
  82.     if [ -n "$ANS" ]
  83.     then
  84.         return 0
  85.     else
  86.         return 1
  87.     fi
  88. }
  89.  
  90. getyn()
  91. {
  92.     if [ -z "$YNDEF" ]
  93.     then
  94.         YNDEF=y
  95.     fi
  96.  
  97.     while :
  98.     do
  99.         $ECHO "$*? [${YNDEF}] \c"
  100.         read ANS
  101.         if [ -n "$ANS" ]
  102.         then
  103.             case $ANS in
  104.             [yY])
  105.                 RET=0
  106.                 break
  107.                 ;;
  108.             [nN])
  109.                 RET=1
  110.                 break
  111.                 ;;
  112.             *)
  113.                 $ECHO "Please answer y or n"
  114.                 ;;
  115.             esac
  116.         else
  117.             if [ $YNDEF = y ]
  118.             then
  119.                 RET=0
  120.             else
  121.                 RET=1
  122.             fi
  123.             break
  124.         fi
  125.     done
  126.  
  127.     YNDEF=
  128.     return $RET
  129. }
  130.  
  131. dolink()
  132. {
  133.     # Try symlink first
  134.     ln -s $1 $2 2>/dev/null
  135.     if [ $? != 0 ]
  136.     then
  137.         # Use hard link
  138.         ln $1 $2 2>/dev/null
  139.     fi
  140.     STATUS=$?
  141.     if [ $STATUS != 0 ]
  142.     then
  143.         $ECHO "Error: Cannot link $1 -> $2"
  144.     fi
  145. }
  146.  
  147. makedir()
  148. {
  149.     $ECHO "\t$1"
  150.     if [ ! -d $1 ]
  151.     then
  152.         mkdir -p $1
  153.     fi
  154.     if [ $2 != _default_ ]
  155.     then
  156.         chmod $2 $1 2>/dev/null
  157.     fi
  158.     if [ $3 != _default_ ]
  159.     then
  160.         chown $3 $1 2>/dev/null
  161.     fi
  162.     if [ $4 != _default_ ]
  163.     then
  164.         chgrp $4 $1 2>/dev/null
  165.     fi
  166.     return 0
  167. }
  168.  
  169. instfile()
  170. {
  171.     TDIR=`dirname $2`
  172.  
  173.     if [ -n "$TDIR" -a -d "$TDIR" -a -w "$TDIR" ]
  174.     then
  175.         if [ ! -f $1 ]
  176.         then
  177.             $ECHO "\t$2 NOT installed"
  178.             logerr -n "Cannot install $2: file missing."
  179.             return 1
  180.         fi
  181.  
  182.         $ECHO "\t$2"
  183.         if [ -f $2 ]
  184.         then
  185.             rm -f $2
  186.         fi
  187.  
  188.         cp $1 $2
  189.         if [ $? -ne 0 ]
  190.         then
  191.             logerr -n "Cannot install $2: file copy error."
  192.             return 1
  193.         fi
  194.  
  195.         if [ -f $2 ]
  196.         then
  197.             if [ $3 != _default_ ]
  198.             then
  199.                 chmod $3 $2 2>/dev/null
  200.             fi
  201.             if [ $4 != _default_ ]
  202.             then
  203.                 chown $4 $2 2>/dev/null
  204.             fi
  205.             if [ $5 != _default_ ]
  206.             then
  207.                 chgrp $5 $2 2>/dev/null
  208.             fi
  209.         fi
  210.         return 0
  211.     else
  212.         $ECHO "\t$2 NOT installed"
  213.         logerr -n "Cannot install $2: target directory not writable."
  214.         return 1
  215.     fi
  216. }
  217.  
  218.  
  219. #
  220. # Main execution starts here
  221. #
  222.  
  223. # Use Sysv echo if possible
  224. if [ -x /usr/5bin/echo ]
  225. then
  226.     ECHO=/usr/5bin/echo                # SunOS SysV echo
  227. elif [ -z "`(echo -e a) 2>/dev/null | fgrep e`" ]
  228. then
  229.     ECHO="echo -e"                    # GNU bash, etc.
  230. else
  231.     ECHO=echo                    # generic SysV
  232. fi
  233.  
  234. # Remove old error log file
  235. ERROR=0
  236. rm -f $ERRFILE
  237. if [ -f $ERRFILE ]
  238. then
  239.     $ECHO "Cannot remove old $ERRFILE: error logging not enabled."
  240.     ERRFILE=/dev/null
  241. fi
  242.  
  243. # Determine whether to remove distribution files after installation
  244. NOREMOVE=0
  245. if [ $# -eq 1 ]
  246. then
  247.     # This could be combined with the above if statement with -a, but
  248.     # FreeBSD's /bin/sh seems to dislike that.
  249.     if [ "$1" = "-n" ]
  250.     then
  251.         NOREMOVE=1
  252.     fi
  253. elif [ -f COPYING -a -f INSTALL -a -f PORTING ]
  254. then
  255.     NOREMOVE=1
  256. fi
  257.  
  258. # Check privilege
  259. (id | fgrep 'uid=0(root)') >/dev/null 2>&1
  260. if [ $? != 0 ]
  261. then
  262.     $ECHO "Warning: You should be the super user to install xmcd."
  263.  
  264.     YNDEF=n
  265.     if getyn "Proceed anyway"
  266.     then
  267.         $ECHO "\nWithout super-user privilege, some files may not"
  268.         $ECHO "be properly installed, or they may be installed with\n"
  269.         $ECHO "incorrect permissions.\n"
  270.  
  271.         XBINPERM=711
  272.         XBINOWNER=_default_
  273.         BINOWNER=_default_
  274.         OWNER=_default_
  275.         GROUP=_default_
  276.     else
  277.         logerr -p "Not super user: installation aborted by user"
  278.         doexit 1
  279.     fi
  280. fi
  281.  
  282. # Implement platform-specific features and deal with OS quirks
  283. SCO=0
  284. if (uname -X | fgrep "Release = 3.2") >/dev/null 2>&1
  285. then
  286.     SCO=1
  287. fi
  288.  
  289. OS_SYS=`uname -s 2>/dev/null`
  290. case "$OS_SYS" in
  291. ULTRIX)
  292.     SHELL=/bin/sh5
  293.     ;;
  294. A/UX)
  295.     SHELL=/bin/ksh
  296.     ;;
  297. *)
  298.     SHELL=/bin/sh
  299.     ;;
  300. esac
  301.  
  302.  
  303. $ECHO "Installing \"xmcd\" Motif CD Player version $XMCD_VER by Ti Kan"
  304.  
  305.  
  306. # Determine BINDIR
  307.  
  308. if [ -z "$BINDIR" ]
  309. then
  310.     if [ -d /usr/bin/X11 ]
  311.     then
  312.         BINDIR=/usr/bin/X11
  313.     elif [ -d /usr/X/bin ]
  314.     then
  315.         BINDIR=/usr/X/bin
  316.     elif [ -d /usr/X11/bin ]
  317.     then
  318.         BINDIR=/usr/X11/bin
  319.     elif [ -d /usr/X386/bin ]
  320.     then
  321.         BINDIR=/usr/X386/bin
  322.     elif [ -d /usr/X11R5/bin ]
  323.     then
  324.         BINDIR=/usr/X11R5/bin
  325.     elif [ -d /usr/X11R6/bin ]
  326.     then
  327.         BINDIR=/usr/X11R6/bin
  328.     elif [ -d /usr/openwin/bin ]
  329.     then
  330.         BINDIR=/usr/openwin/bin
  331.     elif [ -d /usr/local/bin/X11 ]
  332.     then
  333.         BINDIR=/usr/local/bin/X11
  334.     elif [ -d /usr/local/bin ]
  335.     then
  336.         BINDIR=/usr/local/bin
  337.     elif [ -d /usr/lbin ]
  338.     then
  339.         BINDIR=/usr/lbin
  340.     else
  341.         BINDIR=/usr/bin/X11
  342.     fi
  343. else
  344.     BINDIR=`echo $BINDIR | sed 's/\/\//\//g'`
  345. fi
  346.  
  347. while :
  348. do
  349.     if getstr "\nEnter X binary directory\n[${BINDIR}]:"
  350.     then
  351.         if [ -d "$ANS" ]
  352.         then
  353.             BINDIR=$ANS
  354.             break
  355.         else
  356.             $ECHO "Error: $ANS does not exist."
  357.         fi
  358.     else
  359.         break
  360.     fi
  361. done
  362.  
  363.  
  364. # Determine LIBDIR
  365.  
  366. if [ -z "$LIBDIR" ]
  367. then
  368.     if [ -d /usr/lib/X11 ]
  369.     then
  370.         LIBDIR=/usr/lib/X11
  371.     elif [ -d /usr/X/lib ]
  372.     then
  373.         LIBDIR=/usr/X/lib
  374.     elif [ -d /usr/X11/lib/X11 ]
  375.     then
  376.         LIBDIR=/usr/X11/lib
  377.     elif [ -d /usr/X386/lib/X11 ]
  378.     then
  379.         LIBDIR=/usr/X386/lib
  380.     elif [ -d /usr/X11R5/lib/X11 ]
  381.     then
  382.         LIBDIR=/usr/X11R5/lib
  383.     elif [ -d /usr/X11R6/lib/X11 ]
  384.     then
  385.         LIBDIR=/usr/X11R6/lib
  386.     elif [ -d /usr/openwin/lib ]
  387.     then
  388.         LIBDIR=/usr/openwin/lib/X11
  389.     elif [ -d /usr/local/lib/X11 ]
  390.     then
  391.         LIBDIR=/usr/local/lib/X11
  392.     else
  393.         LIBDIR=/usr/lib/X11
  394.     fi
  395. else
  396.     LIBDIR=`echo $LIBDIR | sed 's/\/\//\//g'`
  397. fi
  398.  
  399. while :
  400. do
  401.     if getstr "\nEnter X library directory\n[${LIBDIR}]:"
  402.     then
  403.         if [ -d "$ANS" ]
  404.         then
  405.             LIBDIR=$ANS
  406.             break
  407.         else
  408.             $ECHO "Error: $ANS does not exist."
  409.         fi
  410.     else
  411.         break
  412.     fi
  413. done
  414.  
  415.  
  416. # Determine MANFILE
  417.  
  418. if [ -z "$MANFILE" ]
  419. then
  420.     MANFILE=/usr/man/man1/xmcd.1
  421.  
  422.     if [ -d /usr/man/man.LOCAL ]
  423.     then
  424.         MANFILE=/usr/man/man.LOCAL/xmcd.LOCAL
  425.     elif [ -d /usr/local/man/man1 ]
  426.     then
  427.         MANFILE=/usr/local/man/man1/xmcd.1
  428.     fi
  429. else
  430.     MANFILE=`echo $MANFILE | sed 's/\/\//\//g'`
  431. fi
  432.  
  433. if getstr "\nEnter xmcd on-line manual file path\n[${MANFILE}]:"
  434. then
  435.     MANFILE=$ANS
  436. fi
  437.  
  438. MANDIR=`dirname $MANFILE`
  439. if [ ! -d $MANDIR ]
  440. then
  441.     YNDEF=y
  442.     if getyn "Directory $MANDIR does not exist.  Create it"
  443.     then
  444.         makedir $MANDIR $DIRPERM $OWNER $GROUP
  445.     else
  446.         $ECHO "The xmcd on-line manual will not be installed."
  447.         MANFILE=
  448.         MANDIR=
  449.     fi
  450. fi
  451.  
  452. # Determine CMANFILE
  453.  
  454. CMANFILE="`dirname $MANFILE`/`basename $MANFILE | sed 's/xmcd/cda/'`"
  455. if getstr "\nEnter cda on-line manual file path\n[${CMANFILE}]:"
  456. then
  457.     CMANFILE=$ANS
  458. fi
  459.  
  460. CMANDIR=`dirname $CMANFILE`
  461. if [ ! -d $CMANDIR ]
  462. then
  463.     YNDEF=y
  464.     if getyn "Directory $CMANDIR does not exist.  Create it"
  465.     then
  466.         makedir $CMANDIR $DIRPERM $OWNER $GROUP
  467.     else
  468.         $ECHO "The cda on-line manual will not be installed."
  469.         CMANFILE=
  470.         CMANDIR=
  471.     fi
  472. fi
  473.  
  474. # Determine WMANFILE
  475.  
  476. WMANFILE="`dirname $MANFILE`/`basename $MANFILE | sed 's/xmcd/wm2xmcd/'`"
  477. if getstr "\nEnter wm2xmcd on-line manual file path\n[${WMANFILE}]:"
  478. then
  479.     WMANFILE=$ANS
  480. fi
  481.  
  482. WMANDIR=`dirname $WMANFILE`
  483. if [ ! -d $WMANDIR ]
  484. then
  485.     YNDEF=y
  486.     if getyn "Directory $WMANDIR does not exist.  Create it"
  487.     then
  488.         makedir $WMANDIR $DIRPERM $OWNER $GROUP
  489.     else
  490.         $ECHO "The wm2xmcd on-line manual will not be installed."
  491.         WMANFILE=
  492.         WMANDIR=
  493.     fi
  494. fi
  495.  
  496.  
  497. # Make all necessary directories
  498.  
  499. $ECHO "\nMaking directories..."
  500.  
  501. makedir $LIBDIR/xmcd $DIRPERM $OWNER $GROUP
  502. makedir $LIBDIR/xmcd/config $DIRPERM $OWNER $GROUP
  503. makedir $LIBDIR/xmcd/config/.tbl $DIRPERM $OWNER $GROUP
  504. makedir $LIBDIR/xmcd/help $DIRPERM $OWNER $GROUP
  505. makedir $LIBDIR/xmcd/cddb $DIRPERM $OWNER $GROUP
  506.  
  507. for i in $CATEGORIES
  508. do
  509.     makedir $LIBDIR/xmcd/cddb/$i $CDIRPERM $OWNER $GROUP
  510. done
  511.  
  512.  
  513. # Install files
  514. $ECHO "\nInstalling xmcd files..."
  515.  
  516. # Binaries
  517. instfile xmcd.d/xmcd $BINDIR/xmcd $XBINPERM $XBINOWNER $GROUP
  518. instfile cda.d/cda $BINDIR/cda $XBINPERM $XBINOWNER $GROUP
  519. instfile wm2xmcd.d/wm2xmcd $BINDIR/wm2xmcd $BINPERM $BINOWNER $GROUP
  520.  
  521. # X resource defaults file
  522. if instfile xmcd.d/XMcd.ad $LIBDIR/app-defaults/XMcd $FILEPERM $OWNER $GROUP &&
  523.    [ $LIBDIR != "/usr/lib/X11" -a -d /usr/lib/X11/app-defaults ]
  524. then
  525.     # Test LIBDIR
  526.     rm -f /usr/lib/X11/app-defaults/._junk_
  527.  
  528.     >$LIBDIR/app-defaults/._junk_
  529.  
  530.     if [ ! -f /usr/lib/X11/app-defaults/._junk_ ]
  531.     then
  532.         rm -f /usr/lib/X11/app-defaults/XMcd
  533.         dolink $LIBDIR/app-defaults/XMcd /usr/lib/X11/app-defaults/XMcd
  534.     fi
  535.  
  536.     rm -f $LIBDIR/app-defaults/._junk_
  537. fi
  538.  
  539. # Help files
  540. for i in xmcd.d/hlpfiles/*Btn xmcd.d/hlpfiles/*Ind xmcd.d/hlpfiles/*Txt \
  541.      xmcd.d/hlpfiles/*Scale xmcd.d/hlpfiles/*List xmcd.d/hlpfiles/*Box
  542. do
  543.     j=`echo $i | sed 's/xmcd\.d\/hlpfiles\///'`
  544.     instfile $i $LIBDIR/xmcd/help/$j $FILEPERM $OWNER $GROUP
  545. done
  546.  
  547. # Demo cddb file
  548. instfile misc.d/demo.db $LIBDIR/xmcd/cddb/misc/$DEMODB $FILEPERM $OWNER $GROUP
  549.  
  550. # Configuration files
  551. instfile libdi.d/common.cfg $LIBDIR/xmcd/config/common.cfg \
  552.     $FILEPERM $OWNER $GROUP
  553. instfile libdi.d/device.cfg $LIBDIR/xmcd/config/device.cfg \
  554.     $FILEPERM $OWNER $GROUP
  555.  
  556. ENTRIES=`(cd libdi.d/cfgtbl; echo * | \
  557.     sed -e 's/Imakefile//' -e 's/Makefile//' -e 's/SCCS//' -e 's/RCS//')`
  558. for i in $ENTRIES
  559. do
  560.     if (fgrep "tblver=" libdi.d/cfgtbl/$i) >/dev/null 2>&1
  561.     then
  562.         instfile libdi.d/cfgtbl/$i $LIBDIR/xmcd/config/.tbl/$i \
  563.             $FILEPERM $OWNER $GROUP
  564.     fi
  565. done
  566.  
  567. # Configuration script
  568. SHELL_S=`echo $SHELL | sed 's/\//\\\\\//g'`
  569. LIBDIR_S=`echo $LIBDIR | sed 's/\//\\\\\//g'`
  570. sed -e "s/^#!\/bin\/sh.*/#!$SHELL_S/" \
  571.     -e "s/^LIBDIR=.*/LIBDIR=$LIBDIR_S/" <libdi.d/configure.sh >/tmp/xmcdcfg.$$
  572.  
  573. instfile /tmp/xmcdcfg.$$ $LIBDIR/xmcd/config/configure.sh \
  574.     $SCRPERM $OWNER $GROUP
  575. rm -f /tmp/xmcdcfg.$$
  576.  
  577. # Convenience link to configure.sh
  578. if [ "$SCO" = 1 ]
  579. then
  580.     if [ -w /usr/lib/mkdev ]
  581.     then
  582.         $ECHO "\t/usr/lib/mkdev/xmcd"
  583.         rm -f /usr/lib/mkdev/xmcd
  584.         dolink $LIBDIR/xmcd/config/configure.sh /usr/lib/mkdev/xmcd
  585.     fi
  586. fi
  587.  
  588. # Motif XKeysymDB file
  589. if [ ! -f $LIBDIR/XKeysymDB ]
  590. then
  591.     instfile xmcd.d/XKeysymDB $LIBDIR/XKeysymDB $FILEPERM $OWNER $GROUP
  592. fi
  593.  
  594. # Manual page files
  595. if [ -n "$MANFILE" ]
  596. then
  597.     instfile xmcd.d/xmcd.man $MANFILE $FILEPERM $OWNER $GROUP
  598. fi
  599. if [ -n "$CMANFILE" ]
  600. then
  601.     instfile cda.d/cda.man $CMANFILE $FILEPERM $OWNER $GROUP
  602. fi
  603. if [ -n "$WMANFILE" ]
  604. then
  605.     instfile wm2xmcd.d/wm2xmcd.man $WMANFILE $FILEPERM $OWNER $GROUP
  606. fi
  607.  
  608. # Run device-dependent config script
  609. if [ -r $LIBDIR/xmcd/config/configure.sh ]
  610. then
  611.     $SHELL $LIBDIR/xmcd/config/configure.sh
  612.     if [ $? != 0 ]
  613.     then
  614.         logerr -n "$LIBDIR/xmcd/config/configure.sh failed."
  615.     fi
  616. else
  617.     logerr -p "Cannot execute $LIBDIR/xmcd/config/configure.sh"
  618. fi
  619.  
  620. if [ $NOREMOVE = 0 ]
  621. then
  622.     rm -rf common.d libdi.d misc.d xmcd.d cda.d wm2xmcd.d install.sh \
  623.         xmcd.tar
  624.     mv README README.xmcd 2>/dev/null
  625.     mv FAQ FAQ.xmcd 2>/dev/null
  626. fi
  627.  
  628. doexit $ERROR
  629.  
  630.